drop procedure cancelar_servicio;
delimiter ?
CREATE PROCEDURE cancelar_servicio( IN fcns_cs int,IN fid_servicio int,OUT fflag int)
	BEGIN
		DECLARE frestante_de_pago float;
		DECLARE fid_cliente int;
		
		SELECT IFNULL(restante_de_pago,0) INTO frestante_de_pago FROM contratacion_servicio WHERE Id_servicio=fid_servicio AND cns_cs=fcns_cs AND (Id_estatus=3 OR Id_estatus=6);
		SELECT IFNULL(Id_cliente,0) INTO fid_cliente FROM contratacion_servicio WHERE Id_servicio=fid_servicio AND cns_cs=fcns_cs AND (Id_estatus=3 OR Id_estatus=6);
		IF fid_cliente!=0 THEN # Por seguridad se verifica que exista el Cliente
			UPDATE cliente SET saldo=saldo-frestante_de_pago WHERE Id_cliente=fid_cliente;# Se resta del saldo del cliente
			UPDATE contratacion_servicio SET Id_estatus=4 WHERE Id_servicio=fid_servicio AND cns_cs=fcns_cs;#Servicio concluido
			SET fflag=1;#Se modifico estatus
		ELSE
			SET fflag=2;#No se modifico estatus, se encontro servicio ya cancelado
		END IF;
	END ?
delimiter ;

BEGIN;
CALL cancelar_servicio(7,43,@z);
ROLLBACK;